package com.yupi.maker.meta;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * @version 1.0
 * @Author moresuo
 * @Date 2024/9/10 15:34
 * @注释
 */
@NoArgsConstructor
@Data
public class Meta implements Serializable {


    /**
     * 名称
     */
    private String name;
    /**
     * 描述
     */
    private String description;
    /**
     * 基本的包名
     */
    private String basePackage;
    /**
     * 版本号
     */
    private String version;
    /**
     * 作者
     */
    private String author;
    /**
     * 创建时间
     */
    private String createTime;
    /**
     * 文件配置信息
     */
    private FileConfig fileConfig;
    /**
     * 数据模型信息
     */
    private ModelConfig modelConfig;

    @NoArgsConstructor
    @Data
    public static class FileConfig implements Serializable{
        /**
         * 文件目录输入路径
         */
        private String inputRootPath;
        /**
         * 文件目录输出路径
         */
        private String outputRootPath;
        /**
         * 文件根路径
         */
        private String sourceRootPath;
        /**
         * 文件类型：单个文件、文件组
         */
        private String type;
        /**
         * 文件信息
         */
        private List<FileInfo> files;

        @NoArgsConstructor
        @Data
        public static class FileInfo implements Serializable{
            /**
             * 文件输入路径
             */
            private String inputPath;
            /**
             * 文件输出路径
             */
            private String outputPath;
            /**
             * 文件组的控制开关
             */
            private String condition;
            /**
             * 文件类型：file/group
             */
            private String type;
            /**
             * 生成文件的类型：static/dynamic
             */
            private String generateType;
            /**
             * 文件组关键字
             */
            private String groupKey;
            /**
             * 文件组名称
             */
            private String groupName;
            /**
             * 文件组中的文件信息
             */
            private List<FileInfo> files;
        }
    }

    @NoArgsConstructor
    @Data
    public static class ModelConfig implements Serializable{
        /**
         * 数据模型列表
         */
        private List<ModelInfo> models;

        @NoArgsConstructor
        @Data
        public static class ModelInfo implements Serializable{
            /**
             * 挖坑的字段
             */
            private String fieldName;
            /**
             * 数据类型
             */
            private String type;
            /**
             * 描述
             */
            private String description;
            /**
             * 默认值
             */
            private Object defaultValue;
            /**
             * 命令缩写
             */
            private String abbr;
            /**
             * 模型组的key
             */
            private String groupKey;
            /**
             * 模型组名称
             */
            private String groupName;
            /**
             * 模型组中的数据
             */
            private List<ModelInfo> models;
            /**
             * 控制数据模型组的开关
             */
            private String condition;
            //中间参数
            private String allArgsStr;
        }
    }
}
